WebGLã¡ã¢ãªç®¡çã®è©³çްããããã¡ã®å²ãåœãŠãè§£æŸããã¹ããã©ã¯ãã£ã¹ããŠã§ãããŒã¹ã®3Dã°ã©ãã£ãã¯ã¹ã®ããã©ãŒãã³ã¹ãæé©åããããã®é«åºŠãªãã¯ããã¯ã«ã€ããŠè§£èª¬ããŸãã
WebGLã¡ã¢ãªç®¡çïŒãããã¡ã®å²ãåœãŠãšè§£æŸããã¹ã¿ãŒãã
WebGLã¯ããŠã§ããã©ãŠã¶ã«åŒ·åãª3Dã°ã©ãã£ãã¯ã¹æ©èœãããããããŠã§ãããŒãžå ã§çŽæ¥æ²¡å ¥åã®äœéšãå¯èœã«ããŸããããããä»ã®ã°ã©ãã£ãã¯ã¹APIãšåæ§ã«ãæé©ãªããã©ãŒãã³ã¹ãšãªãœãŒã¹æ¯æžã®é²æ¢ã«ã¯ãå¹ççãªã¡ã¢ãªç®¡çãäžå¯æ¬ ã§ããWebGLããããã¡ã®ã¡ã¢ãªãã©ã®ããã«å²ãåœãŠãè§£æŸããããçè§£ããããšã¯ãçå£ãªWebGLéçºè ã«ãšã£ãŠäžå¯æ¬ ã§ãããã®èšäºã§ã¯ãWebGLã¡ã¢ãªç®¡çã«é¢ããå æ¬çãªã¬ã€ããæäŸãããããã¡ã®å²ãåœãŠãšè§£æŸã®ãã¯ããã¯ã«çŠç¹ãåœãŠãŸãã
WebGLãããã¡ãšã¯ïŒ
WebGLã§ã¯ããããã¡ã¯ã°ã©ãã£ãã¯ã¹åŠçãŠãããïŒGPUïŒã«ä¿åãããŠããã¡ã¢ãªé åã§ãããããã¡ã¯ãé ç¹ããŒã¿ïŒäœçœ®ãæ³ç·ããã¯ã¹ãã£åº§æšãªã©ïŒãšã€ã³ããã¯ã¹ããŒã¿ïŒé ç¹ããŒã¿ãžã®ã€ã³ããã¯ã¹ïŒãæ ŒçŽããããã«äœ¿çšãããŸãããã®ããŒã¿ã¯ãGPUã«ãã£ãŠ3Dãªããžã§ã¯ãã®ã¬ã³ããªã³ã°ã«äœ¿çšãããŸãã
ãã®ããã«èããŠãã ãããå³åœ¢ãæããŠãããšããŸãããããã¡ã¯ãå³åœ¢ãæ§æãããã¹ãŠã®ç¹ïŒé ç¹ïŒã®åº§æšãšãåç¹ã®è²ãªã©ã®ä»ã®æ å ±ãä¿æããŠããŸããæ¬¡ã«ãGPUã¯ãã®æ å ±ã䜿çšããŠå³åœ¢ãéåžžã«é«éã«æç»ããŸãã
WebGLã§ã¡ã¢ãªç®¡çãéèŠãªçç±
WebGLã§ã®äžé©åãªã¡ã¢ãªç®¡çã¯ãããã€ãã®åé¡ã«ã€ãªããå¯èœæ§ããããŸãã
- ããã©ãŒãã³ã¹ã®äœäžïŒéå°ãªã¡ã¢ãªã®å²ãåœãŠãšè§£æŸã¯ãã¢ããªã±ãŒã·ã§ã³ãé ãããå¯èœæ§ããããŸãã
- ã¡ã¢ãªãªãŒã¯ïŒã¡ã¢ãªã®è§£æŸãå¿ãããšãã¡ã¢ãªãªãŒã¯ãçºçããæçµçã«ãã©ãŠã¶ãã¯ã©ãã·ã¥ããå¯èœæ§ããããŸãã
- ãªãœãŒã¹æ¯æžïŒGPUã«ã¯éãããã¡ã¢ãªããããŸããäžèŠãªããŒã¿ã§GPUã¡ã¢ãªãåãããšãã¢ããªã±ãŒã·ã§ã³ãæ£ããã¬ã³ããªã³ã°ãããªããªããŸãã
- ã»ãã¥ãªãã£ãªã¹ã¯ïŒãŸãã§ãããã¡ã¢ãªç®¡çã®è匱æ§ãæªçšãããããšããããŸãã
WebGLã§ã®ãããã¡å²ãåœãŠ
WebGLã§ã®ãããã¡å²ãåœãŠã«ã¯ãããã€ãã®æé ãå«ãŸããŸãã
- ãããã¡ãªããžã§ã¯ãã®äœæïŒæ°ãããããã¡ãªããžã§ã¯ããäœæããã«ã¯ã
gl.createBuffer()颿°ã䜿çšããŸãããã®é¢æ°ã¯ããããã¡ã衚ãäžæã®èå¥åïŒæŽæ°ïŒãè¿ããŸãã - ãããã¡ã®ãã€ã³ãïŒãããã¡ãªããžã§ã¯ããç¹å®ã®ã¿ãŒã²ããã«ãã€ã³ãããã«ã¯ã
gl.bindBuffer()颿°ã䜿çšããŸããã¿ãŒã²ããã¯ããããã¡ã®ç®çãæå®ããŸãïŒããšãã°ãé ç¹ããŒã¿ã®å Žåã¯gl.ARRAY_BUFFERãã€ã³ããã¯ã¹ããŒã¿ã®å Žåã¯gl.ELEMENT_ARRAY_BUFFERïŒã - ãããã¡ãžã®ããŒã¿ã®å
¥åïŒJavaScripté
åïŒéåžžã¯
Float32ArrayãŸãã¯Uint16ArrayïŒãããããã¡ã«ããŒã¿ãã³ããŒããã«ã¯ãgl.bufferData()颿°ã䜿çšããŸããããã¯æãéèŠãªæé ã§ãããå¹ççãªå®è·µãæã圱é¿ãäžããé åã§ããããŸãã
äŸïŒé ç¹ãããã¡ã®å²ãåœãŠ
WebGLã§é ç¹ãããã¡ãå²ãåœãŠãæ¹æ³ã®äŸã次ã«ç€ºããŸãã
// WebGLã³ã³ããã¹ããååŸããŸãã
const canvas = document.getElementById('myCanvas');
const gl = canvas.getContext('webgl');
// é ç¹ããŒã¿ïŒã·ã³ãã«ãªäžè§åœ¢ïŒã
const vertices = new Float32Array([
-0.5, -0.5, 0.0,
0.5, -0.5, 0.0,
0.0, 0.5, 0.0
]);
// ãããã¡ãªããžã§ã¯ããäœæããŸãã
const vertexBuffer = gl.createBuffer();
// ãããã¡ãARRAY_BUFFERã¿ãŒã²ããã«ãã€ã³ãããŸãã
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
// é ç¹ããŒã¿ããããã¡ã«ã³ããŒããŸãã
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
// ããã§ããããã¡ã¯ã¬ã³ããªã³ã°ã«äœ¿çšã§ããããã«ãªããŸããã
gl.bufferData()ã®äœ¿çšæ³ã®çè§£
gl.bufferData()颿°ã¯3ã€ã®åŒæ°ãåããŸãã
- ã¿ãŒã²ããïŒãããã¡ããã€ã³ããããŠããã¿ãŒã²ããïŒäŸïŒ
gl.ARRAY_BUFFERïŒã - ããŒã¿ïŒã³ããŒããããŒã¿ãå«ãJavaScripté åã
- äœ¿çšæ³ïŒãããã¡ãã©ã®ããã«äœ¿çšããããã«ã€ããŠã®WebGLå®è£ ãžã®ãã³ããäžè¬çãªå€ã«ã¯ä»¥äžãå«ãŸããŸãã
gl.STATIC_DRAWïŒãããã¡ã®å 容ã¯1åæå®ãããäœåºŠã䜿çšãããŸãïŒéçãžãªã¡ããªã«é©ããŠããŸãïŒãgl.DYNAMIC_DRAWïŒãããã¡ã®å 容ã¯ç¹°ãè¿ãåæå®ãããäœåºŠã䜿çšãããŸãïŒé »ç¹ã«å€åãããžãªã¡ããªã«é©ããŠããŸãïŒãgl.STREAM_DRAWïŒãããã¡ã®å 容ã¯1åæå®ãããæ°å䜿çšãããŸãïŒãã£ãã«å€åããªããžãªã¡ããªã«é©ããŠããŸãïŒã
é©åãªäœ¿çšæ³ã®ãã³ããéžæãããšãããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸããããŒã¿ãé »ç¹ã«å€åããªãããšãããã£ãŠããå Žåã¯ãéåžžãgl.STATIC_DRAWãæè¯ã®éžæè¢ã§ããããŒã¿ãé »ç¹ã«å€åããå Žåã¯ãæŽæ°ã®é »åºŠã«å¿ããŠgl.DYNAMIC_DRAWãŸãã¯gl.STREAM_DRAWã䜿çšããŸãã
é©åãªããŒã¿åã®éžæ
é ç¹å±æ§ã«é©åãªããŒã¿åãéžæããããšã¯ãã¡ã¢ãªå¹çã®ããã«äžå¯æ¬ ã§ããWebGLã¯ã次ã®ãããªããã€ãã®ããŒã¿åããµããŒãããŠããŸãã
Float32ArrayïŒ32ãããæµ®åå°æ°ç¹æ°ïŒé ç¹ã®äœçœ®ãæ³ç·ããã¯ã¹ãã£åº§æšã«æãäžè¬çïŒãUint16ArrayïŒ16ããã笊å·ãªãæŽæ°ïŒé ç¹ã®æ°ã65536æªæºã®å Žåã®ã€ã³ããã¯ã¹ã«é©ããŠããŸãïŒãUint8ArrayïŒ8ããã笊å·ãªãæŽæ°ïŒã«ã©ãŒã³ã³ããŒãã³ããŸãã¯ãã®ä»ã®å°ããªæŽæ°å€ã«äœ¿çšã§ããŸãïŒã
ç¹ã«å€§ããªã¡ãã·ã¥ãæ±ãå Žåã¯ãããå°ããããŒã¿åã䜿çšãããšãã¡ã¢ãªæ¶è²»éãå€§å¹ ã«åæžã§ããŸãã
ãããã¡å²ãåœãŠã®ãã¹ããã©ã¯ãã£ã¹
- ãããã¡ãäºåã«å²ãåœãŠãïŒã¢ããªã±ãŒã·ã§ã³ã®éå§æãŸãã¯ã¢ã»ããã®èªã¿èŸŒã¿æã«ãããã¡ãå²ãåœãŠãŸããã¬ã³ããªã³ã°ã«ãŒãäžã«åçã«å²ãåœãŠãã®ã§ã¯ãªãããããè¡ããšãé »ç¹ãªå²ãåœãŠãšè§£æŸã®ãªãŒããŒããããåæžãããŸãã
- åä»ãé
åã䜿çšããïŒåžžã«åä»ãé
åïŒäŸïŒ
Float32ArrayãUint16ArrayïŒã䜿çšããŠé ç¹ããŒã¿ãä¿åããŸããåä»ãé åã¯ãåºã«ãªããã€ããªããŒã¿ãžã®å¹ççãªã¢ã¯ã»ã¹ãæäŸããŸãã - ãããã¡ã®åå²ãåœãŠãæå°éã«æããïŒäžèŠãªãããã¡ã®åå²ãåœãŠãé¿ããŸãããããã¡ã®å
å®¹ãæŽæ°ããå¿
èŠãããå Žåã¯ããããã¡å
šäœãåå²ãåœãŠãã代ããã«ã
gl.bufferSubData()ã䜿çšããŸããããã¯ãåçã·ãŒã³ã«ãšã£ãŠç¹ã«éèŠã§ãã - ã€ã³ã¿ãŒãªãŒããããé ç¹ããŒã¿ã䜿çšããïŒé¢é£ããé ç¹å±æ§ïŒäŸïŒäœçœ®ãæ³ç·ããã¯ã¹ãã£åº§æšïŒãåäžã®ã€ã³ã¿ãŒãªãŒãããããããã¡ã«ä¿åããŸããããã«ãããããŒã¿ã®å±ææ§ãåäžããã¡ã¢ãªã¢ã¯ã»ã¹ã®ãªãŒããŒããããåæžã§ããŸãã
WebGLã§ã®ãããã¡è§£æŸ
ãããã¡ãå®äºãããããã®ãããã¡ãå æããŠããã¡ã¢ãªãè§£æŸããããšãäžå¯æ¬ ã§ããããã¯ãgl.deleteBuffer()颿°ã䜿çšããŠè¡ããŸãã
ãããã¡ã®è§£æŸã«å€±æãããšãã¡ã¢ãªãªãŒã¯ãçºçããæçµçã«ã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããå¯èœæ§ããããŸããäžèŠãªãããã¡ã®è§£æŸã¯ãåäžããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒãŸãã¯é·æéå®è¡ãããWebã²ãŒã ã§ç¹ã«éèŠã§ããããžã¿ã«ã¯ãŒã¯ã¹ããŒã¹ãæŽçãããããªãã®ã ãšèããŠãã ãããä»ã®ã¿ã¹ã¯ã®ããã«ãªãœãŒã¹ãè§£æŸããŸãã
äŸïŒé ç¹ãããã¡ã®è§£æŸ
WebGLã§é ç¹ãããã¡ãè§£æŸããæ¹æ³ã®äŸã次ã«ç€ºããŸãã
// é ç¹ãããã¡ãªããžã§ã¯ããåé€ããŸãã
gl.deleteBuffer(vertexBuffer);
vertexBuffer = null; // ãããã¡ãåé€ããåŸã倿°ãnullã«èšå®ããããšã¯è¯ãç¿æ
£ã§ãã
ãããã¡ãè§£æŸããã¿ã€ãã³ã°
ãããã¡ããã€è§£æŸããããæ±ºå®ããã®ã¯é£ããå ŽåããããŸããäžè¬çãªã·ããªãªã次ã«ç€ºããŸãã
- ãªããžã§ã¯ããäžèŠã«ãªã£ããšãïŒãªããžã§ã¯ããã·ãŒã³ããåé€ãããå Žåã¯ããã®é¢é£ãããã¡ãè§£æŸããå¿ èŠããããŸãã
- ã·ãŒã³ã®åãæ¿ãæïŒç°ãªãã·ãŒã³ãŸãã¯ã¬ãã«ãåãæ¿ããå Žåã¯ãåã®ã·ãŒã³ã«é¢é£ä»ãããããããã¡ãè§£æŸããŸãã
- ã¬ããŒãžã³ã¬ã¯ã·ã§ã³äžïŒãªããžã§ã¯ãã®ã©ã€ãã¿ã€ã ã管çãããã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããå Žåã¯ã察å¿ãããªããžã§ã¯ããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ããããšãã«ãããã¡ãè§£æŸãããããã«ããŠãã ããã
ãããã¡è§£æŸã®äžè¬çãªèœãšã穎
- è§£æŸãå¿ããïŒæãäžè¬çãªééãã¯ãäžèŠã«ãªã£ããšãã«ãããã¡ã®è§£æŸãåã«å¿ããããšã§ããå²ãåœãŠããããã¹ãŠã®ãããã¡ã远跡ããé©åã«è§£æŸããããã«ããŠãã ããã
- ãã€ã³ãããããããã¡ã®è§£æŸïŒãããã¡ãè§£æŸããåã«ãçŸåšã©ã®ã¿ãŒã²ããã«ããã€ã³ããããŠããªãããšã確èªããŠãã ããã察å¿ããã¿ãŒã²ããã«
nullããã€ã³ãããŠããããã¡ã®ãã€ã³ããè§£é€ããŸããgl.bindBuffer(gl.ARRAY_BUFFER, null); - äºéè§£æŸïŒåããããã¡ãè€æ°åè§£æŸããããšã¯é¿ããŠãã ãããããã«ããããšã©ãŒãçºçããå¯èœæ§ããããŸãã誀ã£ãŠäºéè§£æŸãçºçããªãããã«ãåé€åŸã«ãããã¡å€æ°ã
nullã«èšå®ããããšããå§ãããŸãã
é«åºŠãªã¡ã¢ãªç®¡çãã¯ããã¯
åºæ¬çãªãããã¡ã®å²ãåœãŠãšè§£æŸã«å ããŠãWebGLã§ã®ã¡ã¢ãªç®¡çãæé©åããããã«äœ¿çšã§ããããã€ãã®é«åºŠãªãã¯ããã¯ããããŸãã
ãããã¡ãµãããŒã¿æŽæ°
ãããã¡ã®äžéšã®ã¿ãæŽæ°ããå¿
èŠãããå Žåã¯ãgl.bufferSubData()颿°ã䜿çšããŸãããã®é¢æ°ã䜿çšãããšããããã¡å
šäœãåå²ãåœãŠããããšãªããæ¢åã®ãããã¡ã®ç¹å®ã®é åã«ããŒã¿ãã³ããŒã§ããŸãã
äŸã次ã«ç€ºããŸãã
// é ç¹ãããã¡ã®äžéšãæŽæ°ããŸãã
const offset = 12; // ãªãã»ããïŒãã€ãåäœïŒïŒ3ã€ã®float * 4ãã€ã/floatïŒã
const newData = new Float32Array([1.0, 1.0, 1.0]); // æ°ããé ç¹ããŒã¿ã
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferSubData(gl.ARRAY_BUFFER, offset, newData);
é ç¹é åãªããžã§ã¯ãïŒVAOïŒ
é ç¹é åãªããžã§ã¯ãïŒVAOïŒã¯ãé ç¹å±æ§ã®ç¶æ ãã«ãã»ã«åããããšã«ãããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ãã匷åãªæ©èœã§ããVAOã¯ããã¹ãŠã®é ç¹å±æ§ãã€ã³ãã£ã³ã°ãä¿åããåäžã®é¢æ°åŒã³åºãã§ç°ãªãé ç¹ã¬ã€ã¢ãŠããåãæ¿ããããšãã§ããŸãã
VAOã¯ããªããžã§ã¯ããã¬ã³ããªã³ã°ãããã³ã«é ç¹å±æ§ãåãã€ã³ãããå¿ èŠãæžããããšã«ãããã¡ã¢ãªç®¡çãæ¹åããããšãã§ããŸãã
ãã¯ã¹ãã£å§çž®
ãã¯ã¹ãã£ã¯ãå€ãã®å ŽåãGPUã¡ã¢ãªã®ããªãã®éšåãæ¶è²»ããŸãããã¯ã¹ãã£å§çž®æè¡ïŒäŸïŒDXTãETCãASTCïŒã䜿çšãããšãèŠèŠçãªå質ã«å€§ããªåœ±é¿ãäžããããšãªãããã¯ã¹ãã£ãµã€ãºãå€§å¹ ã«åæžã§ããŸãã
WebGLã¯ãããŸããŸãªãã¯ã¹ãã£å§çž®æ¡åŒµæ©èœããµããŒãããŠããŸããã¿ãŒã²ãããã©ãããã©ãŒã ãšåžæã®å質ã¬ãã«ã«åºã¥ããŠãé©åãªå§çž®åœ¢åŒãéžæããŠãã ããã
詳现ã¬ãã«ïŒLODïŒ
詳现ã¬ãã«ïŒLODïŒã«ã¯ãã«ã¡ã©ããã®è·é¢ã«åºã¥ããŠãªããžã§ã¯ãã«ç°ãªã詳现ã¬ãã«ã䜿çšããããšãå«ãŸããŸããé ãã«ãããªããžã§ã¯ãã¯ãäœè§£å床ã®ã¡ãã·ã¥ãšãã¯ã¹ãã£ã§ã¬ã³ããªã³ã°ã§ãããããã¡ã¢ãªæ¶è²»éãåæžããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
ãªããžã§ã¯ãããŒãªã³ã°
ãªããžã§ã¯ããé »ç¹ã«äœæããã³ç Žæ£ããå Žåã¯ããªããžã§ã¯ãããŒãªã³ã°ã®äœ¿çšãæ€èšããŠãã ããããªããžã§ã¯ãããŒãªã³ã°ã«ã¯ãæåããæ°ãããªããžã§ã¯ããäœæããã®ã§ã¯ãªããåå©çšã§ããäºåã«å²ãåœãŠããããªããžã§ã¯ãã®ããŒã«ãç¶æããããšãå«ãŸããŸããããã«ãããé »ç¹ãªå²ãåœãŠãšè§£æŸã®ãªãŒããŒããããåæžããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãæå°éã«æããããšãã§ããŸãã
WebGLã§ã®ã¡ã¢ãªåé¡ã®ãããã°
WebGLã§ã®ã¡ã¢ãªåé¡ã®ãããã°ã¯å°é£ãªå ŽåããããŸããã圹ç«ã€ããã€ãã®ããŒã«ãšãã¯ããã¯ããããŸãã
- ãã©ãŠã¶ã®éçºè ããŒã«ïŒææ°ã®ãã©ãŠã¶ã®éçºè ããŒã«ã¯ãã¡ã¢ãªãªãŒã¯ãšéå°ãªã¡ã¢ãªæ¶è²»ãç¹å®ããã®ã«åœ¹ç«ã€ã¡ã¢ãªãããã¡ã€ãªã³ã°æ©èœãæäŸããŸããChrome DevToolsãŸãã¯Firefox Developer Toolsã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªäœ¿çšéãç£èŠããŸãã
- WebGLã€ã³ã¹ãã¯ã¿ïŒWebGLã€ã³ã¹ãã¯ã¿ã䜿çšãããšãå²ãåœãŠããããããã¡ããã¯ã¹ãã£ãªã©ãWebGLã³ã³ããã¹ãã®ç¶æ ãæ€æ»ã§ããŸããããã«ãããã¡ã¢ãªãªãŒã¯ããã®ä»ã®ã¡ã¢ãªé¢é£ã®åé¡ãç¹å®ã§ããŸãã
- ã³ã³ãœãŒã«ãã®ã³ã°ïŒã³ã³ãœãŒã«ãã®ã³ã°ã䜿çšããŠããããã¡ã®å²ãåœãŠãšè§£æŸã远跡ããŸãããããã¡ãäœæããã³åé€ãããšãã«ãããã¡IDããã°ã«èšé²ããŠããã¹ãŠã®ãããã¡ãæ£ããè§£æŸãããŠããããšã確èªããŸãã
- ã¡ã¢ãªãããã¡ã€ãªã³ã°ããŒã«ïŒç¹æ®ãªã¡ã¢ãªãããã¡ã€ãªã³ã°ããŒã«ã¯ãã¡ã¢ãªäœ¿çšã«é¢ããããè©³çŽ°ãªæŽå¯ãæäŸã§ããŸãããããã®ããŒã«ã¯ãã¡ã¢ãªãªãŒã¯ããã©ã°ã¡ã³ããŒã·ã§ã³ãããã³ãã®ä»ã®ã¡ã¢ãªé¢é£ã®åé¡ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
WebGLãšã¬ããŒãžã³ã¬ã¯ã·ã§ã³
WebGLã¯GPUäžã§ç¬èªã®ã¡ã¢ãªã管çããŸãããJavaScriptã®ã¬ããŒãžã³ã¬ã¯ã¿ã¯ãWebGLãªãœãŒã¹ã«é¢é£ä»ããããJavaScriptãªããžã§ã¯ãã®ç®¡çã«ãããŠäŸç¶ãšããŠåœ¹å²ãæãããŸããæ³šæããªããšãJavaScriptãªããžã§ã¯ããäžå¿ èŠã«é·ãä¿æãããç¶æ³ãçºçããã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã
ãããåé¿ããã«ã¯ãäžèŠã«ãªã£ããšãã«WebGLãªããžã§ã¯ããžã®åç
§ãè§£æŸããããã«ããŠãã ããã察å¿ããWebGLãªãœãŒã¹ãåé€ããåŸã倿°ãnullã«èšå®ããŸããããã«ãããã¬ããŒãžã³ã¬ã¯ã¿ãJavaScriptãªããžã§ã¯ããå æããŠããã¡ã¢ãªãåå©çšã§ããŸãã
çµè«
å¹ççãªã¡ã¢ãªç®¡çã¯ã髿§èœãªWebGLã¢ããªã±ãŒã·ã§ã³ãäœæããããã«äžå¯æ¬ ã§ããWebGLããããã¡ã®ã¡ã¢ãªãã©ã®ããã«å²ãåœãŠãè§£æŸããããçè§£ãããã®èšäºã§æŠèª¬ãããŠãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããã¡ã¢ãªãªãŒã¯ãé²ãããšãã§ããŸãããããã¡ã®å²ãåœãŠãšè§£æŸãæ³šææ·±ã远跡ããé©åãªããŒã¿åãšäœ¿çšæ³ã®ãã³ããéžæãããããã¡ãµãããŒã¿æŽæ°ãé ç¹é åãªããžã§ã¯ããªã©ã®é«åºŠãªãã¯ããã¯ã䜿çšããŠãã¡ã¢ãªå¹çãããã«åäžãããããšãå¿ããªãã§ãã ããã
ãããã®æŠå¿µããã¹ã¿ãŒããããšã§ãWebGLã®å¯èœæ§ãæå€§éã«åŒãåºããããŸããŸãªããã€ã¹ã§ã¹ã ãŒãºã«å®è¡ãããæ²¡å ¥åã®3Dãšã¯ã¹ããªãšã³ã¹ãäœæã§ããŸãã
ãã®ä»ã®ãªãœãŒã¹
- Mozilla Developer NetworkïŒMDNïŒWebGL APIããã¥ã¡ã³ã
- Khronos Group WebGL Webãµã€ã
- WebGLããã°ã©ãã³ã°ã¬ã€ã